﻿using ConfExpert.Forms.Ceki;
using DevTeam;
using System;
using System.Collections.Generic;
using System.Data;

namespace ConfExpert.Forms.Siparisler
{
    public class PL_Hackett : XPL
    {
        int OBedendenYuklenecekAdet = 0;
        int yuklenen = 0;
        int BoxNr = 0, BigBoxNr = 0, SekmedekiKoliAdedi = 0;
        int Koli = 0;

        Dictionary<int, int> d = new Dictionary<int, int>();
        public PL_Hackett(string PlanlamaIds, int YuklemePartisiId) :
            base(241, PlanlamaIds, YuklemePartisiId)
        {
            if (EksikYapilandirma)
            {
                DevExpress.XtraEditors.XtraMessageBox.Show("Bu müşteri için PL yapılandırması eksik.");
                return;
            }

            int idx = 0;
            foreach (DataRow r in dsData.Tables[0].Rows)
            {
                idx = r["idx"].ToInt();
                //Magaza = r["Magaza"].ToStr();
                SayfaAdi = r["SayfaAdi"].ToStr();
                dtAdetler = dsData.Tables[1].Select("idx=" + idx).CopyToDataTable();
                SekmedekiKoliAdedi = 0;

                DataRow drx = dtAdetler.Rows[0];
                DataRow drP = dtP.NewRow();
                drP["idx"] = drx["idx"];
                drP["DagilimId"] = drx["DagilimId"];
                drP["YuklemePartisiId"] = YuklemePartisiId;
                //drP["Magaza"] = Magaza;
                drP["SayfaAdi"] = SayfaAdi;
                drP["Termin"] = drx["Termin"];
                drP["PLTemplateId"] = PLTemplateId;
                dtP.Rows.Add(drP);

                if (BoxNrReset)
                    BoxNr = 0;
                if (BigBoxNrReset)
                    BigBoxNr = 0;

                int res = 0;
                foreach (DataRow dr in dtAdetler.Rows)
                {
                    int toplam = dr["Toplam"].ToInt();
                    int KoliSayisi = (int)Math.Round(toplam * 1.0 / QtyPerBox);   //üste yuvarlamazsak adet QtyMin'den büyük olduğunda da shrink etmeye (önceki kolilere) sıkıştırmaya çalışıyor!
                    for (int turn = 0; turn <= 1; turn++)
                    {
                        if (KoliSayisi > 0)
                        {
                            toplam = dr["Toplam"].ToInt();
                            d = new Dictionary<int, int>();
                            for (int x1 = 0; x1 < KoliSayisi; x1++)
                                d.Add(x1, 0);

                            res = 0;
                            int x2 = 0;
                            while (toplam > 0)
                            {
                                d[x2]++;
                                toplam--;

                                if (d[x2] > QtyPerBoxMax)
                                {
                                    res = -1;
                                    break;
                                }

                                x2 = (++x2) % KoliSayisi;
                            }

                            if (res == 0)
                                break;
                        }

                        KoliSayisi++;
                    }

                    if (res == 0)
                    {
                        Koli = 0;
                        DataRow drPL = dtPLines.NewRow();
                        for (int i = 1; i < 29; i++)
                        {
                            string beden = string.Format("A{0:d2}", i);
                            OBedendenYuklenecekAdet = dr[beden].ToInt();
                            if (OBedendenYuklenecekAdet > 0)
                                while (OBedendenYuklenecekAdet > 0)
                                {
                                    if (yuklenen + OBedendenYuklenecekAdet <= d[Koli])
                                    {
                                        yuklenen += OBedendenYuklenecekAdet;
                                        drPL[beden] = OBedendenYuklenecekAdet;
                                        OBedendenYuklenecekAdet = 0;
                                        break;
                                    }
                                    else
                                    {
                                        drPL[beden] = d[Koli] - yuklenen;
                                        SatirKapat(ref drPL, dr);
                                        Koli++;
                                    }
                                }


                        }

                        if (yuklenen > 0)
                            SatirKapat(ref drPL, dr);
                    }
                    else
                        throw new ApplicationException("Özel bir durumla karşılaşıldı. Lütfen yazılım ekibini bilgilendirin.");
                }
            }

            PLKaydet();
        }

        private void SatirKapat(ref DataRow drPL, DataRow dr)
        {
            drPL["idx"] = dr["idx"];
            drPL["DosyaNo"] = dr["DosyaNo"];
            drPL["Model"] = dr["Model"];
            drPL["PlanlamaId"] = dr["PlanlamaId"];
            drPL["Ulke"] = dr["Ulke"];
            drPL["Artikel"] = dr["Artikel"];
            drPL["Renk"] = dr["Renk"];
            drPL["OrderNr"] = dr["OrderNr"];
            drPL["Ek5"] = dr["Ek5"];
            drPL["Brand"] = dr["Brand"];

            drPL[dx["PO"]] = dr[dx["PO"]];
            drPL[dx["Season"]] = dr[dx["Season"]];
            drPL[dx["TKZ Number"]] = dr[dx["TKZ Number"]];
            drPL[dx["Division"]] = dr[dx["Division"]];

            drPL["BoxNr"] = ++BoxNr;
            //++SekmedekiKoliAdedi;
            //if ((SekmedekiKoliAdedi - 1) % QtyPerBigBox == 0)
            //    ++BigBoxNr;

            drPL["BigBoxNr"] = DBNull.Value;    // BigBoxNr;
            dtPLines.Rows.Add(drPL);
            drPL = dtPLines.NewRow();

            OBedendenYuklenecekAdet -= (d[Koli] - yuklenen);
            yuklenen = 0;
        }
    }
}
